from datetime import datetime, timedelta
import os
import sys
import time

from config import HEADERS,MANAGE_URL
from utils.file_tool import FileTool
from api.common_api import APIClient


def get_resource_urls(event_date):
    """
     生成指定日期的资源链接(json文件)
    :param event_date: 日期 例如: 2025-02-05
    :return:
    """
    api_client = APIClient(MANAGE_URL)
    json_data = {
        "event_date": event_date,
        "event_names": [
            "sniffer_success",
            "save_cloud_add"
        ]
    }
    response = api_client.post('/qa/query_event_log', headers=HEADERS, json=json_data)
    data = response.get('data').get('list')
    # 资源链接非空且唯一
    # 使用 filter 提取非空的 resource_url
    filtered_urls = filter(lambda item: item['resource_url'], data)
    # 创建一个唯一的 resource_url 集合 转列表
    unique_resource_urls = list({item['resource_url'] for item in filtered_urls})
    if len(unique_resource_urls) != 0:
        output_file = 'resource_urls.json'
        # 生成资源链接 json文件
        FileTool.write_file_from_data(unique_resource_urls, output_file)

if __name__ == "__main__":
    # 通过命令行来执行 ，例如 python run_case.py test_offline_add_link.py report
    # report/resource 是解析结果
    # report/html 是生成的报告
    # 执行的脚本位置:  scripts/test_offline_add_link.py  位置注意

    # 生成测试数据
    # 获取当前日期
    today = datetime.now()
    # 计算前一天的日期
    yesterday = today - timedelta(days=1)
    # 格式化日期为 YYYY-MM-DD
    formatted_yesterday = yesterday.strftime('%Y-%m-%d')
    # 生成参数化json文件 生成前一天的数据
    get_resource_urls(formatted_yesterday)
    time.sleep(3)

    commonndLines = sys.argv

    report_resource = commonndLines[2] + "/resource"
    report_html = commonndLines[2] + "/html"

    # # 1. 输出测试结果
    # -n anto 是自动根据cpu 并发执行
    pyString = 'pytest -n auto --capture=no ./scripts/' + commonndLines[1] + ' --alluredir ' + report_resource
    os.system(pyString)
    # # 2. 测试结果转报告
    alSring = "allure generate " + report_resource + " -o " + report_html + " --clean"
    os.system(alSring)